package com.hqq.redis.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 生成红包随机金额工具
 * @author huangqiqin
 * @date 2021/04/07 20:50
 **/
public class RedPacketUtil {

    /**
     * 根据总金额和总人数生成红包的随机金额 - 二倍均值法
     * @param totalMoney    总金额（以分为单位）
     * @param totalPerson   总人数（即红包个数）
     * @return
     */
    public static List<Integer> createRandomMoney(Integer totalMoney, Integer totalPerson){

        if (totalMoney <= 0 ||  totalPerson <= 0){
            throw new RuntimeException("红包总金额以及红包个数不能为空");
        }

        // 保存生成的随机金额
        List<Integer> resultList = new ArrayList<>(totalPerson);

        // 保存剩余的金额数（初始时为总金额数）
        int restMoney = totalMoney;

        // 保存剩余的人数（红包个数，初始时为总人数）
        int restPerson = totalPerson;

        Random random = new Random();

        while (restPerson - 1 > 0){

            // 计算本次随机金额的区间范围上限
            int rangUp = restMoney / restPerson * 2;
            // 本次生成的随机金额，在 [1, rangUp)区间范围内
            int currentRandomMoney = random.nextInt(rangUp - 1) + 1;

            // 剩余金额减去本次生成的随机金额作为下次的剩余金额
            restMoney -= currentRandomMoney;
            // 红包个数减1
            restPerson--;

            resultList.add(currentRandomMoney);
        }

        // 将最后一次剩余的金额作为最后一个红包的金额
        resultList.add(restMoney);

        return resultList;
    }

    /**
     * 创建红包
     * @param totalMoney    红包总金额
     * @param totalPerson   红包个数
     * @return 红包id
     */
    public static String createRedPacket(int totalMoney, int totalPerson){
        if (totalMoney > 0 && totalPerson > 0){

        }
        return null;
    }


}
